<template>
</template>
<script>
  /*
  作者：刘明星
  组件功能：循环请求使用
  func 函数的参数:
   url 字符串类型的链接 例如 '/peopleinformation/peopleassessdata/peopleAssessInformation/save'
   requestType 字符串类型的请求类型 只有'get' 'post'
   data 数组类型的数据 每个数组里面的数据是个对象 例如 [{},{}]
   isReturnData 布尔类型(默认为false):
     1.true时返回 returnData 函数 并带着 data 请求成功后返回值 和 datas 循环请求时每条数据值。
     2.false则不会返回值
  */
  export default {
    methods: {
      async func (url, requestType, data, isReturnData) {
        if (isReturnData === undefined) {
          isReturnData = false
        }
        // for (let index in data) {
          /*
            去掉for循环采用手动递归地狱同步，index作为自递归条件
            开启循环异步只需加上for循环去掉index,并且去掉index对应判断条件即自调用即可
            例：asyncFunc中去除
              && index !== -1
              --index
              this.asyncFunc(url, requestType, data[index], isReturnData, index)
          */
          await this.asyncFunc(url, requestType, data[data.length - 1], isReturnData, data.length - 1, data)
        // }
      },
      // 需要同步等待的请求
      asyncFunc (url, requestType, dataValue, isReturnData, index, dataArr) {
        if (requestType === 'post' && index !== -1) {
          this.$http({
              url: url,
              method: requestType,
              data: dataValue
          }).then(({data}) => {
            if (isReturnData) {
              this.$emit('returnData', data, dataArr, index)
            }
            --index
            this.asyncFunc(url, requestType, dataArr[index], isReturnData, index, dataArr)
         })
        } else if ((requestType === 'get' || requestType === 'delete') && index !== -1) {
          this.$http({
              url: url,
              method: requestType,
              params: {
                ...dataValue
              }
          }).then(({data}) => {
            if (isReturnData) {
              this.$emit('returnData', data, dataArr, index)
            }
           --index
           this.asyncFunc(url, requestType, dataArr[index], isReturnData, index, dataArr)
         })
        }
        }
      }
  }
</script>
